package admin

import (
	"e_mall_server/models"
	"e_mall_server/service"
	"fmt"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"strconv"
)

/**
 * @Author: zhaobin
 * @Description TODO
 * @Date: 2022-05-10 15:47
 */

// GetGoodsList 获取商品列表接口
func GetGoodsList(c *gin.Context) {

	// 绑定分页信息
	PageParam := models.PageParam{}
	if err := c.ShouldBind(&PageParam); err != nil {
		zap.L().Error("GetGoodsList with invalid param", zap.Error(err))
		ResponseError(c, "请求参数错误")
		return
	}
	fmt.Println(PageParam)
	goodsResponse, err := service.GetGoodsList(&PageParam)
	if err != nil {
		zap.L().Error("service.GetGoodsList() failed", zap.Error(err))
		ResponseError(c, "查询商品列表失败")
		return
	}
	ResponseSuccess(c, goodsResponse)
}

// AddGoods 添加商品信息接口
func AddGoods(c *gin.Context) {
	goodsParam := models.GoodsParam{}
	if err := c.ShouldBind(&goodsParam); err != nil {
		zap.L().Error("AddGoods with invalid param", zap.Error(err))
		ResponseError(c, "请求参数错误")
		return
	}

	// 业务逻辑处理
	if err := service.AddGoods(&goodsParam); err != nil {
		zap.L().Error("service.AddGoods(&Goods) failed", zap.Error(err))
		ResponseError(c, "增加商品失败 请重试")
		return
	}

	// 创建成功返回响应
	ResponseSuccess(c, nil)

}

// UpdateGoods 修改商品信息接口
func UpdateGoods(c *gin.Context) {
	Goods := models.Goods{}
	if err := c.ShouldBind(&Goods); err != nil {
		zap.L().Error("UpdateGoods with invalid param", zap.Error(err))
		ResponseError(c, "请求参数错误")
		return
	}
	zap.L().Debug("Goods数据", zap.Any("value", Goods))
	// 业务逻辑处理
	if count := service.UpdateGoods(&Goods); count > 0 {
		// 创建成功返回响应
		ResponseSuccess(c, nil)
		return
	}
	ResponseError(c, "修改商品失败 请重试")
}

// DeleteGoods 删除商品接口
func DeleteGoods(c *gin.Context) {
	id, err := strconv.ParseInt(c.Param("id"), 10, 64)
	if err != nil {
		zap.L().Error("DeleteGoods with invalid param", zap.Error(err))
		ResponseError(c, "传入参数错误")
		return
	}
	count := service.DeleteGoodsById(id)
	if count > 0 {
		ResponseSuccess(c, nil)
		return
	}
	ResponseError(c, "删除商品失败")
}

// GetGoodsDetailById 通过id查询商品信息
func GetGoodsDetailById(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		zap.L().Error("GetGoodsDetailById with invalid param", zap.Error(err))
		ResponseError(c, "请求参数错误")
	}
	goods, err := service.GetGoodsDetailById(id)
	if err != nil {
		zap.L().Error("service.GetGoodsDetailById(id) failed", zap.Error(err))
		ResponseError(c, "获取管理员信息错误")
		return
	}
	ResponseSuccess(c, goods)
}
